import pandas as pd
import sqlite3
from openpyxl import load_workbook

def read_excel_with_openpyxl(file_path, sheet_name, chunk_size=10000):
    wb = load_workbook(filename=file_path, read_only=True)
    ws = wb[sheet_name]

    data_chunk = []
    for i, row in enumerate(ws.rows):
        if i != 0 and i % chunk_size == 0:
            yield pd.DataFrame(data_chunk)
            data_chunk = []
        data_chunk.append([cell.value for cell in row])

    if data_chunk:
        yield pd.DataFrame(data_chunk)

# 读取 Excel 文件
excel_file = r'D:\HIS_DATA\门诊.xlsx'  # 替换为你的 Excel 文件名

# 连接到 SQLite 数据库（如果数据库不存在，会自动创建）
conn = sqlite3.connect('qinghua_mz.db')  # 替换为你的数据库文件名

# ['1.1患者基本信息', '1.2患者诊断信息', '1.7检验结果', '1.6检验信息', '1.5门诊处方信息', '1.4门诊患者费用明细']
sheet_map = {
    # '1.1患者基本信息': 'HIS_PAT_INFO_OP',
    # '1.2患者诊断信息': 'HIS_PAT_DIAG_OP',
    # '1.4门诊患者费用明细': 'HIS_FEE_DETAIL_OP',
    '1.5门诊处方信息': 'HIS_ORDER_OP',
    # '1.6检验信息': 'HIS_TEST',
    # '1.7检验结果': 'HIS_TEST_RESULT'
}
for sheet, table in sheet_map.items():  # 示例中仅包含两个表
    print(f"正在处理工作表: {sheet}")
    for i, chunk in enumerate(read_excel_with_openpyxl(excel_file, sheet_name=sheet)):
        print(f"处理第 {i + 1} 块数据")
        # 将数据插入到 SQLite 数据库中的表
        chunk.to_sql(table, conn, if_exists='append', index=False)
        print(f"已插入 {len(chunk)} 行数据到表 '{table}'。")
        # 提交事务
        conn.commit()
    # 关闭连接
    conn.close()

print("所有数据已成功插入到 SQLite 数据库中。")